// package com.alibaba.druid.sql.dialect.ads.visitor;

// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn;
// import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
// import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
// import com.alibaba.druid.sql.ast.statement.SQLShowColumnsStatement;
// import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
// import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement;
// import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;

// import java.util.List;
#pragma once
#include <string>
#include <list>
#include "../../../visitor/SQLASTOutputVisitor.h"
#include "AdsVisitor.h"

// class Appendable;
class DbType;
class SQLAlterTableAddColumn;
class SQLShowColumnsStatement;

class AdsOutputVisitor : virtual public SQLASTOutputVisitor, virtual public AdsVisitor
{
public:
  AdsOutputVisitor(std::stringstream *appender);

  AdsOutputVisitor(std::stringstream *appender, DbType_ptr dbType);

  AdsOutputVisitor(std::stringstream *appender, BOOL_ptr parameterized);

  void printCreateTable(SQLCreateTableStatement_ptr x, BOOL_ptr printSelect);

  bool visit(SQLCreateTableStatement_ptr x);

  // @Override
  bool visit(SQLAlterTableAddColumn_ptr x) override;

  // @Override
  bool visit(SQLShowColumnsStatement_ptr x) override;

  // @Override
  void endVisit(MySqlPrimaryKey_ptr x) override;

  // @Override
  void endVisit(MySqlCreateTableStatement_ptr x) override;
};
